/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.epsi.blokus.server;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map.Entry;

/**
 * Message interne échangé entre le serveur et le gui
 * @author julien.lafont
 */
public class MessageInterne {

     public enum TTypeMessageInterne {
        indefini,
        maj_nb_joueurs,
        maj_nb_salons,
        ajouter_ligne
    };

    private TTypeMessageInterne type_message = TTypeMessageInterne.indefini;
    private HashMap<String, Serializable> objects = new HashMap<String, Serializable>();

    /**
     * Crée un nouveau message avec le type spécifié
     * @param type_message
     */
    public MessageInterne( TTypeMessageInterne type_message)
    {
        this.type_message = type_message;
    }

     /**
     * Crée un nouveau message avec le type "ajouter_ligne" par défaut
     * @param type_message
     */
    public MessageInterne( )
    {
        this.type_message = TTypeMessageInterne.ajouter_ligne;
    }

    /**
     * Définir le type du message
     * @param type
     * @return méthode fluide
     */
    public MessageInterne setTypeMessage(TTypeMessageInterne type)
    {
        this.type_message = type;
        return this;
    }

    /**
     * Ajouter un objet serialisable au message (
     * @param key : Identifiant de l'objet
     * @param o : Objet serialisable
     * @return méthode fluide
     */
    public MessageInterne addObject(String key, Serializable o)
    {
        this.objects.put(key, o);
        return this;
    }


    /**
     * Retourne le type du message
     * @return type du message
     */
    public TTypeMessageInterne getTypeMessage()
    {
        return this.type_message;
    }

    /**
     * Retourne l'objet défini par son identifiant
     * @param key
     * @return
     */
    public Serializable getObject(String key)
    {
        return this.objects.get(key);
    }


    /**
     * Affiche un debug complet de l'objet en cours
     * @return
     */
    public String debug()
    {
        StringBuffer buff = new StringBuffer();

        buff.append("Type : ").append(this.type_message.toString());

         for (Entry<String, Serializable> elem : objects.entrySet())
        {
            buff.append("\n - ").append(elem.getKey()).append(" = ").append(elem.getValue().toString());
        }
        return buff.toString();
    }

}
